home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagn_r.zip / NUMBERS.SWG / 0049_Binary and Hexidecimal.pas < prev    next >
Pascal/Delphi Source File  |  1994-05-26  |  2KB  |  74 lines

  1. {
  2. I've seen requests for these two procedures several times, and finally got
  3. around to writing them in ASM.
  4.  
  5. { ------- CUT HERE ------- }
  6.  
  7. (* Hex converts a number (num) to Hexadecimal.                      *)
  8. (*    num  is the number to convert                                 *)
  9. (*    nib  is the number of Hexadecimal digits to return            *)
  10. (* Example: Hex(31, 4) returns '001F'                               *)
  11.  
  12. Function Hex(num: Word; nib: Byte): String; Assembler;
  13. ASM
  14.       PUSHF
  15.       LES  DI, @Result
  16.       XOR  CH, CH
  17.       MOV  CL, nib
  18.       MOV  ES:[DI], CL
  19.       JCXZ @@3
  20.       ADD  DI, CX
  21.       MOV  BX, num
  22.       STD
  23. @@1:  MOV  AL, BL
  24.       AND  AL, $0F
  25.       OR   AL, $30
  26.       CMP  AL, $3A
  27.       JB   @@2
  28.       ADD  AL, $07
  29. @@2:  STOSB
  30.       SHR  BX, 1
  31.       SHR  BX, 1
  32.       SHR  BX, 1
  33.       SHR  BX, 1
  34.       LOOP @@1
  35. @@3:  POPF
  36. End;
  37.  
  38.  
  39. (* Binary converts a number (num) to Binary.                        *)
  40. (*    num  is the number to convert                                 *)
  41. (*    bits is the number of Binary digits to return                 *)
  42. (* Example: Binary(31, 16) returns '0000000000011111'               *)
  43.  
  44. Function Binary(num: Word; bits: Byte): String; Assembler;
  45. ASM
  46.       PUSHF
  47.       LES  DI, @Result
  48.       XOR  CH, CH
  49.       MOV  CL, bits
  50.       MOV  ES:[DI], CL
  51.       JCXZ @@3
  52.       ADD  DI, CX
  53.       MOV  BX, num
  54.       STD
  55. @@1:  MOV  AL, BL
  56.       AND  AL, $01
  57.       OR   AL, $30
  58.       STOSB
  59.       SHR  BX, 1
  60.       LOOP @@1
  61. @@3:  POPF
  62. End;
  63.  
  64. { ------- CUT HERE ------- }
  65.  
  66. These procedures are fully optomized to my knowledge and have been tested
  67. against normal Pascal routines that perform the same functions.  Test results
  68. returned that Hex performed aprox. 2.14 times faster than it's Pascal
  69. equivilent, and Binary performed aprox. 14 times faster than it's Pascal
  70. equivilent.
  71.  
  72. Enjoy!
  73. David
  74.